﻿using System;

namespace wwl.Domain.Enums.Rbac
{
  /// <summary>
  /// 权限关联操作类型枚举
  /// <para>定义了在权限模型中，**授权主体 (Principal)** 与 **权限载体 (Grantee)** 之间建立、修改或解除关联关系的操作类型。</para>
  /// <para>此枚举是通用的，适用于以下场景：</para>
  /// <list type="bullet">
  ///     <item>用户 &lt;-&gt; 角色 (User &lt;-&gt; Role)</item>
  ///     <item>角色 &lt;-&gt; 权限 (Role &lt;-&gt; Permission)</item>
  ///     <item>用户 &lt;-&gt; 权限 (User &lt;-&gt; Permission, 直接授权)</item>
  /// </list>
  /// 主要用于操作审计、状态管理和业务逻辑判断。
  /// </summary>
  [Flags]
  public enum PermissionOperationType
  {
    /// <summary>
    /// 分配操作：为授权主体授予一个权限载体，建立两者之间的关联关系。
    /// <para>
    /// <strong>示例场景：</strong>
    /// <list type="bullet">
    ///     <item>管理员为用户分配一个角色。</item>
    ///     <item>系统为一个角色分配一项具体的权限。</item>
    /// </list>
    /// </para>
    /// <para><strong>数据影响：</strong>在关联表（如 rbac_user_role, rbac_role_permission）中新增一条记录。</para>
    /// </summary>
    ASSIGN = 1 << 0,

    /// <summary>
    /// 撤销操作：解除授权主体与权限载体之间的关联关系，回收其相应的权限。
    /// <para>
    /// <strong>示例场景：</strong>
    /// <list type="bullet">
    ///     <item>管理员撤销用户的某个角色。</item>
    ///     <item>从角色中移除某项权限。</item>
    /// </list>
    /// </para>
    /// <para><strong>数据影响：</strong>通常是更新关联表中对应记录的状态（如 OperationType 设为 REVOKE），或根据业务逻辑执行软删除。</para>
    /// </summary>
    REVOKE = 1 << 1,

    /// <summary>
    /// 更新操作：修改授权主体与权限载体之间关联关系的附属属性，而不改变关联关系本身的存在性。
    /// <para>
    /// <strong>示例场景：</strong>
    /// <list type="bullet">
    ///     <item>更新用户角色分配的有效期。</item>
    ///     <item>修改角色权限的优先级或备注信息。</item>
    /// </list>
    /// </para>
    /// <para><strong>数据影响：</strong>更新关联表中对应记录的非关键字段（如 `expire_time`, `priority`, `remarks` 等）。</para>
    /// </summary>
    UPDATE = 1 << 2
  }
}